﻿using UnityEngine;
using System.Collections;

public class Carta : MonoBehaviour {
	Controller controller;
	WebServices web;
	GameObject descripcion;
	public  GameObject descr;
	public int pos; //la posicion en la que se encuentra en la mano
	public int id;
	public int fuerza;
	public int coste;
	public int tipo;
	public string accion;
	public float x;
	public float y;
	public float z=-1;

	bool sube;
	bool paraTexto=false;
	bool semaforo=true;
	string textoCuadro="";
	private string respuesta="";
	string url="";
	private int estadomouse =1;


	// Use this for initialization
	void Start () {
		controller= GameObject.Find("Controller").GetComponent<Controller>();
		web = controller.GetComponent<WebServices> ();
		sube=true;

	}
	public void Textura(){
		StartCoroutine (cargarTextura());
	}

	IEnumerator cargarTextura(){

		semaforo = true;
		StartCoroutine(getAtributo(id.ToString(),"urlImg"));
		while(semaforo)
			yield return new WaitForSeconds(0.1f);
		parsear ();

		semaforo = true;
		StartCoroutine(getAllCard(id.ToString()));
		while(semaforo)
			yield return new WaitForSeconds(0.1f);
		fuerza = int.Parse (respuesta.Split ('*')[2]);
		coste=int.Parse (respuesta.Split ('*')[1]);
		tipo=int.Parse (respuesta.Split ('*')[3]);
		if (tipo == 2) {
						semaforo = true;
						StartCoroutine (getAccion (id.ToString ()));
						while (semaforo)
								yield return new WaitForSeconds (0.1f);
						accion = respuesta.Split ('*') [0];
						//print (accion);
				}
		comenzarAnimacionRotacion();
		//print (fuerza.ToString ());
		
	}
	void parsear(){
	
			string[] aux2 = respuesta.Split ('*');
			string aux = aux2 [1];
			//print (":" + aux + ":");
			gameObject.renderer.material.mainTexture = Resources.Load (aux) as Texture2D;
				
	}
	IEnumerator getAllCard( string id){
		bool aux = true;
		while (aux) {
			string URL = "http://cresta.cl/menu/getAllCard.php?id=" + id;
			WWW all_card = new WWW (URL);
			yield return  all_card;
			
			if (all_card.error != null) {
				//print ("Error: " + all_card.error);
				
			} else {
				//print (all_card.text); 
				semaforo = false; 
				respuesta = all_card.text;
				aux=false;
			}
		}
		
	}

	IEnumerator getAccion( string id){
		bool aux = true;
		while (aux) {
			string URL = "http://cresta.cl/menu/getAcciones.php?id=" + id;
			WWW all_card = new WWW (URL);
			yield return  all_card;
			
			if (all_card.error != null) {
				//print ("Error: " + all_card.error);
				
			} else {
				//print (all_card.text); 
				semaforo = false; 
				respuesta = all_card.text;
				aux=false;
			}
		}
		
	}

	IEnumerator getAtributo(string id , string atributo){
		bool aux = true;
		while (aux) {
						string URL = "http://cresta.cl/menu/getAtributo.php?id=" + id + "&atributo=" + atributo;
						WWW atr_card = new WWW (URL);
						yield return atr_card;
		
						if (atr_card.error != null) {
								//print ("Error: " + atr_card.error);
								
						} else {
								//print (atr_card.text);
								semaforo = false; 
								respuesta = atr_card.text;
								//print ("recibi"+respuesta);
								aux=false;

						}
				}
		
	}	
	IEnumerator time(int tiempo){
		
		yield return new WaitForSeconds(tiempo);
		if (paraTexto) {
						//print (textoCuadro);
						if (controller.playerID == 1)
								controller.Fase (3);
						else
								controller.Fase (6);
						controller.enviaPalabra (textoCuadro);
						textoCuadro = "";
						//enviar palabra a reversar
		
						Destroy (gameObject);
						paraTexto = false;
						textoCuadro="";
				}
		
		
	}
	void OnGUI(){
		Event e = Event.current;
		if (e.keyCode == KeyCode.Return && paraTexto) {


			//print (textoCuadro);
			if(controller.playerID==1)controller.Fase(3);
			else controller.Fase (6);
			controller.enviaPalabra(textoCuadro);
			textoCuadro="";
			//enviar palabra a reversar
			
			Destroy(gameObject);
			paraTexto = false;
		} else if (paraTexto) {
			StartCoroutine(time (3));
			GUI.Box (new Rect (Screen.width / 2 - 60, Screen.height / 2 - 105, 200, 70), "Ingrese Palabra:");
			if (GUI.Button (new Rect (Screen.width / 2 + 60, Screen.height / 2 - 80, 60, 20), "Enviar")) {
				//print ("enter");
				paraTexto=false;
				//print (textoCuadro);
				if(controller.playerID==1)controller.Fase(3);
				else controller.Fase (6);
				controller.enviaPalabra(textoCuadro);
				textoCuadro="";
				Destroy (gameObject);
				//print (textoCuadro);
				/*aux = false;
				ighscoreURL = "http://cresta.cl/menu/login.php?var1=" + firstName;
				print (highscoreURL);
				StartCoroutine (GetScores ()); */
			}
			GUI.SetNextControlName ("input");
			textoCuadro = GUI.TextField (new Rect (Screen.width / 2 - 45, Screen.height / 2 - 80, 90, 20), textoCuadro);
			GUI.FocusControl ("input");
		}
		
		
	}
	
	string getImage(int id){
		return "";
	}
	void getDescription(int id){//devuelve costo habildiad, etc
		
		
	}
	void OnMouseOver () {
		/*Cuando pase la mano por sobre la carta, deberia mostrar una version agrandada*/
		//print("hola");
		if (estadomouse == 1) {
			estadomouse=0;
			AudioSource audioSource = gameObject.AddComponent<AudioSource>();
			audioSource.clip = Resources.Load("sonidos/up") as AudioClip;
			audioSource.Play();
		}

		if(sube){
			if(controller.playerID==1)
				gameObject.transform.position=new Vector3(gameObject.transform.position.x,gameObject.transform.position.y+1,-1);
			else
				gameObject.transform.position=new Vector3(gameObject.transform.position.x,gameObject.transform.position.y-1,-1);
			sube=false;
			//generar la descripcion de la carta en el centro del campo

			descripcion=(GameObject)Instantiate(descr,new Vector3(0f,-0.1f,-2f),descr.transform.rotation);
			if(controller.playerID==2){
				descripcion.transform.rotation=Quaternion.Euler(-90,0,0);
			}
			descripcion.renderer.material.mainTexture=gameObject.renderer.material.mainTexture;
		}
		
		
		
		
	}
	
	void OnMouseExit(){
		if (estadomouse == 0) {
			estadomouse=1;		
		}
	
		if(!sube) {
			if(controller.playerID==1)
				gameObject.transform.position=new Vector3(gameObject.transform.position.x,gameObject.transform.position.y-1,-1);
			else
				gameObject.transform.position=new Vector3(gameObject.transform.position.x,gameObject.transform.position.y+1,-1);
			sube=true;
			Destroy(descripcion);
		}
		
	}
	public void comenzarAnimacionRotacion(){
		AudioSource audioSource = gameObject.AddComponent<AudioSource>();
		audioSource.clip = Resources.Load("sonidos/robar") as AudioClip;
		audioSource.volume = 2f;
		audioSource.Play();

		StartCoroutine(animacionRobarRotacion());
	}
	IEnumerator animacionRobarRotacion( ){
		float distx = x-gameObject.transform.position.x;
		float disty = y-gameObject.transform.position.y;
		float distz = z-gameObject.transform.position.z;
		
		for(int i =0 ; i <50 ;  i++){
			yield return new WaitForSeconds (0.005f);
			gameObject.transform.position = new Vector3 (gameObject.transform.position.x + (distx/50),gameObject.transform.position.y + (disty/50),gameObject.transform.position.z + (distz/50));
			gameObject.transform.Rotate(0,3.6f,0);
		}
	}	
	void OnMouseDown(){//al jugar
		//print (pos);
		if (controller.fase == 2 || controller.fase == 5) {
						if (controller.staminaActual >= coste) {
								controller.staminaActual -= coste;
								controller.actualizaStamina ();
								if (controller.playerID == 1) {
										if (controller.fase == 2) {//juego una carta falta if de ver que accion
												Destroy (descripcion);				
												controller.playCard (id, pos);
												//print ("llamando palabra");
												//poner que ingrese palabra si es maniobra
												//print (tipo);
												if (tipo == 1) {
														controller.pasarJugado (fuerza);					
														StartCoroutine (time (3));
														paraTexto = true;
												} else {
														string[] acct = accion.Split (':');
														//print (acct[1]);
														//print (acct[2]);
														int valor = int.Parse (acct [2]);
														string aux = acct [1];
						
														if (aux == "robar") {
																controller.drawCard (valor);

																Destroy (gameObject);
														} else if (aux == "sumarVida") {
																controller.CurarChamp (valor);

																Destroy (gameObject);
														} else if (aux == "sumarStamina") {
																controller.stamina (valor);

																Destroy (gameObject);							
														} else if (aux == "reduceStamina") {
																controller.reduceStamina (valor);
																//controller.stamina(valor);							
																Destroy (gameObject);							
							
														} else if (aux == "inflinge") {
																controller.pegarAccion (valor);
																//controller.stamina(valor);
							
																Destroy (gameObject);
							
							
														}



												}
												//llamar al metodo
					
										}
				
								} else {
										if (controller.fase == 5) {//juego una carta
					
												Destroy (descripcion);
												//print ("llamando palabra");
					
												controller.playCard (id, pos);
												//print (tipo);
												if (tipo == 1) {
														controller.pasarJugado (fuerza);
					
														paraTexto = true;
														StartCoroutine (time (3));
												} else {
														string[] acct = accion.Split (':');
														//print (acct[1]);
														//print (acct[2]);
														int valor = int.Parse (acct [2]);
														string aux = acct [1];
						
														if (aux == "robar") {
																controller.drawCard (valor);
						
																Destroy (gameObject);
														} else if (aux == "sumarVida") {
																controller.CurarChamp (valor);
						
																Destroy (gameObject);
														} else if (aux == "sumarStamina") {
																controller.stamina (valor);
					
																Destroy (gameObject);					
							
														} else if (aux == "reduceStamina") {
																controller.reduceStamina (valor);
																//controller.stamina(valor);							
																Destroy (gameObject);							
							
														} else if (aux == "inflinge") {
																controller.pegarAccion (valor);
																//controller.stamina(valor);
							
																Destroy (gameObject);
							
							
														}

												}
												/*controller.Fase(6);
				controller.enviaPalabra(textoCuadro);
				Destroy(gameObject);*/
					
										}
				
								}

						}
				}
	

		
	}

}
